package org.xx.armory.service.security;

import org.xx.armory.service.ServiceContext;
import org.xx.armory.service.TempFileObject;

/**
 * 验证码图片的提供程序。
 *
 * <p>
 * 提供程序需要生成验证码图片, 并且把对应的验证码保存到令牌中。
 * </p>
 *
 * @author Haart
 */
public interface CaptchaImageProvider {
    /**
     * 在令牌中保存验证码的键名。
     */
    String CAPTCHA_KEY = "__captcha__";

    /**
     * 执行提供程序。
     *
     * @param ctx
     *         服务上下文。
     * @return 包含了验证码图片内容的临时文件对象。
     * @throws IllegalArgumentException
     *         如果参数{@code ctx}是{@code null}。
     */
    TempFileObject execute(ServiceContext ctx);

}
